import argparse
parser = argparse.ArgumentParser()
# Model related arguments
parser.add_argument('--id', default='384x384',
                    help="a name for identifying the model")
parser.add_argument('--arch_encoder', default='resnet34_dilated8',
                    help="architecture of net_encoder")
parser.add_argument('--arch_decoder', default='psp_bilinear',
                    help="architecture of net_decoder")
parser.add_argument('--weights_encoder', default='',
                    help="weights to finetune net_encoder")
parser.add_argument('--weights_decoder', default='',
                    help="weights to finetune net_decoder")
parser.add_argument('--fc_dim', default=512, type=int,
                    help='number of features between encoder and decoder')

# Path related arguments
parser.add_argument('--list_train',
                    default='./data/training.txt')
parser.add_argument('--list_val',
                    default='./data/validation.txt')
parser.add_argument('--root_img',
                    default='./data/images')
parser.add_argument('--root_seg',
                    default='./data/annotations')

# optimization related arguments
parser.add_argument('--num_gpus', default=1, type=int,
                    help='number of gpus to use')
parser.add_argument('--batch_size_per_gpu', default=12, type=int,
                    help='input batch size')
parser.add_argument('--num_epoch', default=2, type=int,
                    help='epochs to train for')
parser.add_argument('--optim', default='Adam', help='optimizer')
parser.add_argument('--lr_encoder', default=1e-3, type=float, help='LR')
parser.add_argument('--lr_decoder', default=1e-2, type=float, help='LR')
parser.add_argument('--lr_pow', default=0.9, type=float,
                    help='power in poly to drop LR')
parser.add_argument('--beta1', default=0.9, type=float,
                    help='momentum for sgd, beta1 for adam')
parser.add_argument('--weight_decay', default=1e-4, type=float,
                    help='weights regularizer')
parser.add_argument('--fix_bn', default=0, type=int,
                    help='fix bn params')

# Data related arguments
parser.add_argument('--num_val', default=128, type=int,
                    help='number of images to evalutate')
parser.add_argument('--num_class', default=2, type=int,
                    help='number of classes')
parser.add_argument('--workers', default=16, type=int,
                    help='number of data loading workers')
parser.add_argument('--imgSize', default=384, type=int,
                    help='input image size')
parser.add_argument('--segSize', default=384, type=int,
                    help='output image size')

# Misc arguments
parser.add_argument('--seed', default=1234, type=int, help='manual seed')
parser.add_argument('--ckpt', default='./ckpt',
                    help='folder to output checkpoints')
parser.add_argument('--vis', default='./vis',
                    help='folder to output visualization during training')
parser.add_argument('--disp_iter', type=int, default=20,
                    help='frequency to display')
parser.add_argument('--eval_epoch', type=int, default=1,
                    help='frequency to evaluate')
args = parser.parse_args()